From a62b7cdc9a610b2e74349e25ae6f3c970d6952d2 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Thu, 13 Apr 2006 08:51:33 +0000 Subject: [PATCH] Take grabs into account. 2006-04-13 Anders Carlsson * gdk/quartz/gdkevents-quartz.c: (synthesize_enter_event): (synthesize_leave_event): (synthesize_crossing_events): Take grabs into account. (find_window_for_event): Only return grabbed window when owner_events is FALSE. --- ChangeLog | 11 +++++++++++ ChangeLog.pre-2-10 | 11 +++++++++++ gdk/quartz/gdkevents-quartz.c | 16 +++++++++++++--- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 20eeb8559d..96873c2173 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2006-04-13 Anders Carlsson + + * gdk/quartz/gdkevents-quartz.c: + (synthesize_enter_event): + (synthesize_leave_event): + (synthesize_crossing_events): + Take grabs into account. + + (find_window_for_event): + Only return grabbed window when owner_events is FALSE. + 2006-04-13 Matthias Clasen * gtk/gtktreeview.c (gtk_tree_view_header_focus): Reorganize slightly diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 20eeb8559d..96873c2173 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,14 @@ +2006-04-13 Anders Carlsson + + * gdk/quartz/gdkevents-quartz.c: + (synthesize_enter_event): + (synthesize_leave_event): + (synthesize_crossing_events): + Take grabs into account. + + (find_window_for_event): + Only return grabbed window when owner_events is FALSE. + 2006-04-13 Matthias Clasen * gtk/gtktreeview.c (gtk_tree_view_header_focus): Reorganize slightly diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c index 97c62f2993..3f6c94a3d4 100644 --- a/gdk/quartz/gdkevents-quartz.c +++ b/gdk/quartz/gdkevents-quartz.c @@ -798,6 +798,11 @@ synthesize_enter_event (GdkWindow *window, { GdkEvent *event; + if (_gdk_quartz_pointer_grab_window != NULL && + !pointer_grab_owner_events && + !(pointer_grab_event_mask & GDK_ENTER_NOTIFY_MASK)) + return; + if (!(GDK_WINDOW_OBJECT (window)->event_mask & GDK_ENTER_NOTIFY_MASK)) return; @@ -829,6 +834,11 @@ synthesize_leave_event (GdkWindow *window, { GdkEvent *event; + if (_gdk_quartz_pointer_grab_window != NULL && + !pointer_grab_owner_events && + !(pointer_grab_event_mask & GDK_LEAVE_NOTIFY_MASK)) + return; + if (!(GDK_WINDOW_OBJECT (window)->event_mask & GDK_LEAVE_NOTIFY_MASK)) return; @@ -926,7 +936,7 @@ synthesize_crossing_events (GdkWindow *window, /* Dunno where we are coming from */ synthesize_enter_event (window, nsevent, mode, GDK_NOTIFY_UNKNOWN); } - + _gdk_quartz_update_mouse_window (window); } @@ -1060,9 +1070,9 @@ find_window_for_event (NSEvent *nsevent, gint *x, gint *y) GdkEventMask event_mask; GdkWindow *real_window; - if (_gdk_quartz_pointer_grab_window) + if (_gdk_quartz_pointer_grab_window && !pointer_grab_owner_events) { - if (pointer_grab_event_mask & get_event_mask_from_ns_event (nsevent)) + if (pointer_grab_event_mask & get_event_mask_from_ns_event (nsevent)) { int tempx, tempy; GdkWindowObject *w = GDK_WINDOW_OBJECT (_gdk_quartz_pointer_grab_window); -- 2.30.2